/*
 * Copyright (C) 2000-2008 Jens Nixdorf and various contributors
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies of the Software, its documentation and marketing & publicity
 * materials, and acknowledgment shall be given in the documentation, materials
 * and software packages that this Software was used.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package org.mopore.jat.timer;

import static java.util.Calendar.DAY_OF_MONTH;
import static java.util.Calendar.HOUR_OF_DAY;
import static java.util.Calendar.MINUTE;
import static java.util.Calendar.SECOND;

import java.util.Calendar;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class FourDigitsCountDown extends Timing {

	
	public FourDigitsCountDown() {
		// default
	}
	
	public FourDigitsCountDown( String validText ){
		
		int hour = Integer.valueOf( validText.substring(0, 2));
		int minute = Integer.valueOf( validText.substring(2));
		
		setDisplayName( validText );
		
		Calendar c = Calendar.getInstance();
		long start = c.getTimeInMillis();
		setStartTime( start );
		
		long end = determineEndTime( hour, minute );
		setEndTime( end );
		
		setType(  TimingType.FOUR_DIGITS_COUNT_DOWN );
	}
	

	private long determineEndTime( int hour, int minute ) {
		
		Calendar calendar = Calendar.getInstance();
		calendar.set( SECOND, 0 );
		int hourNow = calendar.get( HOUR_OF_DAY );
		int minuteNow = calendar.get( MINUTE );
		
		boolean hourIslater = ( hour <= hourNow );
		if ( hourIslater ){
			
			boolean minuteIsLate = ( minute <= minuteNow );
			
			if ( minuteIsLate ){
				calendar.add( DAY_OF_MONTH, 1 );
			}
		}
		
		calendar.set( HOUR_OF_DAY, hour );
		calendar.set( MINUTE, minute );
		
		long result = calendar.getTimeInMillis();
		
		return result;
	}

}
